1.Введение.
TIFF - это новый формат для
файлов, удобный своей открытостью. Любые новые
характеристики изображений могут быть включены в
TIFF-файл ( то есть в файл изображений в стандарт TIFF )
без изменения программ, работающих с форматом TIFF.
Кроме того, в отличии от других форматов, TIFF
поддерживает одновременно как несжатые изображения, так
и сжатые большим количеством разных способов. TIFF
быстро становится мировым стандартом. Многие известные
компании сообщили о подержке этого стандарта, среди
них:
- Aldus; - Microsoft; - Hewlett-Packard; -
Dest; - Datacopy; - Microtek; - Media
Cybernetics; - New Image Tecnology; - Software
Publishing.
2. О TAGовой архитектуре.
Tagged architecture - организация, при которой с
каждым словом памяти связан аппаратно или
программно-реализуемый TAG, указывающий тип хранимой
информации и определяющий множество применимых операций
и способ их выполнения. TAG - часть элемента данных,
определяющая их тип (поле записи, один или несколько
разрядов слова).
3. Различия между TIFFом и другими форматами.
Традиционные форматы файлов изображений используют
фиксированную организацию, то есть каждый параметр
картинки имеет точный адрес относительно начала файла. В
случае ненужности какого-либо параметра место для него
все равно резервируется, но не используется. Поясню
этот момент на примере. Допустим, мы имеем серию книг об
устройстве компьютеров. Поскольку все книги рассказывают
об одних и тех же частях вычислительного комплекса,
таких как процессор, оперативная память, дисководы и
т.п. , то имеет смысл стандартизировать оглавления этих
книг так и назвав главы "процессор", "память" и т.д. и
договориться о порядке их следования в книгах. Однако, с
усложнением компьютеров количество таких глав и их объем
увеличивается. Описывать весь вычислительный комплекс в
одной книге становится задачей сложной и ненужной. Книги
становятся более узкими по содержанию и более глубокими.
Сохранять на данном этапе стандарт на оглавление книг
это означает из версии в версию тащить за собой набор
глав, который полностью уже не используется. имеет смысл
перейти к свободному обычному оглавлению. Аналогичную
ситуацию мы имеем сейчас для форматов файлов
видоизображений. Практически каждая программа,
работающая с изображениями , выполняет свою собственную,
не похожую на другие, задачу. Соответственно, она
требует своих новых параметров. В результате количество
полей описания изображения неуклонно растет. При этом
каждая программа использует крохотное подмножество из
неудержимо растущего множества полей описания. Таким
образом мы приходим к необходимости введения свободного
набора полей (набора глав). Это нововведение и есть
главная отличительная черта стандарта TIFF. При
использовании стандарта TIFF в файл входят только те
параметры, которые необходимы пользователю. При этом
файл получается меньше по объеиу, и ускоряет поиск
нужного параметра. Структура TIFFа аналогична структуре
базы данных. На рисунке 1 приведена примерная структура
TIFF-файла. Каждый tag TIFF-файла представляет собой
заголовок информации, описанной где-то в файле.
TIFF Заголовок TIFF-файла HEADER
pointer Указатель на первую директорию TAGов
кол- Пример TAGа TAGов TAG TYPE Тип TAGa Tag 1
SIZ Размер Tag 2 LENGHT Длина pointer DATA Данные
или Tag 3 OR укказатель pointer POINTER на них
LONG Содержимое (значение) TAG 2 TAG (не уложилось
в 12 байт - DATA размер TAGa)
BIT-MAP Само изображение IMAGE DATA
IMAGE DATA (continue)
4. Преимкщество формата TIFF.
- практически неограниченное количество параметров
изображения; - возможность использования различных
цветов, палитр, оттенков серого, приемов сжатия и прочих
разнообразных возможностей; - экономия памяти на
диске - дисковое пространство занимают только поля,
содержащие информацию; - широкое распостронение TIFFa
как мирового стандарта.
5. Недостатаки формата TIFF.
- некоторая сложность в понимании и восприятии
формата (в сравнении с фиксированным); - нет ниодного
стандартного TIFF-файла. Различные версии имеют
некоторые отличия и поддерживают разные наборы
полей.
Вывод: Разобраться в структуре TIFF-файла не очень
сложно, так как она похожа на структуру файлов базы
данных и структуру организации файлов MS-DOSa. Различные
версии TIFFa все поддерживают некоторый стандартный
набор полей, а дополнительными полями нужно пользоваться
с некоторой долей осторожности. Недостатки
преодолимы.
6. Структура TIFF-файла.
Структура (ее общий вид) показан на рисунке. Подробно
ее составные части разберем ниже.
7. Header (заголовок).
Заголовок - информация о всем TIFF-файле, как о
едином целом.
BYTE ORDER Порядок следования файлов VERSION Hомер
версии TIFFa POINTER Адрес первой директории
TAGов FIRST DIRECTORY
Порядок следования файлов: 49 49 INTEL-формат ASCII
I; 4D 4D Motorola-формат ASCII M INTEL : AB CD
означает число CDAB; Motorola: AB CD означает число
ABCD.
8. Directory (оглавление).
Оглавление состоит из трех частей, показанных на
рисунке.
A ENTRY COUNT Количество TAGов A+2 TAG 0 A+14
TAG 1 TAG 1 вместо данных содержит их адрес A+2+12n
TAG A+14+12n OFFSET TO Адрес следующего оглавления
или если NEXT DIRECTORY его нет (if any) TAG DATA
Данные, не уместившиеся NOT FITTING в TAGе 1 IN TAG
1 ENTRY COUNT показывает, сколько TAGов находятся в
оглавлении. Далее идут TAGи (параметры изображения). Все
TAGи фиксированной длины (12 байт). Последнее поле -
адрес следующего оглавления. Если эта последняя
директория, то это поле должно быть заполнено
нулями.
9. Tag entry.
TAG - основная базовая единица формата TIFF. Образец
TAGa показан на рисунке. Каждый TAG имеет размер 12 байт
и строго определенную структуру. A TAG TYPE Тип
TAGa A+2 DATA TYPE Тип данных A+4 LENGTH Длина
данных A+8 VALUE OR Данное или POINTER адрес
другого данного Первые 2 байта описывают тип
информации, связанной с данным TAGом. Например, значение
282 (11А шестизначное) говорит о том, что этот TAG несет
информацию о разрешении изображения по оси Х. Более
подробно известные мне типы TAGов перечислены
ниже. Следующие 2 байта показывают, какой тип данных
используется в TAGе. Список возможных типов данных
приводится ниже. Очередные 4 байта содержат в себе
длину информации TAGa, измеряемую в предыдущем поле
единицах. Последние 4 байта могут быть использованы в
двух целях. Они могут быть адресом относительно начала
файла, по которому находятся данные TAGa, а могут быть и
самими данными. Если данные умещаются в 4 байта, то они
могут быть расположены а четвертом поле, в противном
случае, эти байты представляют собой адрес данных. Чтобы
определить какой из двух принципов применен, необходимо
посмотреть длину данных в байтах (умножив длину поля на
количество байтов в данном типе данных). Если результат
больше 4 байт, это означает, что в TAGе адрес данных,
иначе - сами данные.
10. Несколько слов о совместимости.
TAGе имеют интересную особенность. Они могут быть как
общие (определенные стандартом TIFF), так и особенные
(определенные некоторыми фирмами для своих целей). Общие
TAGи поддерживаются всеми фирмами, а особенные лишь
создателями и пользователями. Вводя свои особенные
TAGи, сопровождайте свои программы информацией об этих
TAGах!
11. Список типов TAGов.
TAGи в директории должны быть расположены в порядке
возрастания их номеров. Это позволяет быстро находить
нужный TAG или адрес данных TAGa.
OFF (H) Subfile type. Тип данных - 3. Во всех
примерах имеет значение 1. Встречается во всех
примерах.
1OO Image width. Ширина изображения (в
пикселах). Тип данных - 3, длина данных -
1. Данные всегда находятся в TAGе Данные сдвинуты
влево и последние 2 байта значимой информации не
несут.
101(H) Image length. Длина изображения (в
пикселах). Дале полностью анологично 100 (H).
102(H) Bits per sample. Количество бит на
точку. Тип данных - 3. Например: черно-белое
бинарное изображение - 1 бит на точку, 16 цветов - 4
бита на точку и т.д.
103(H) Compression. Тип сжатия (если изображение
сжато). Тип данных - 3. 1=несжатое
изображение 2=сжатие CCITT/3 и т.д.
106(H) Photometric Interp Фотометрическая
интерпритация. тип данных - 3, длина данных - 1. 0 - "1"
в файле соответствует черному цвету, 1 - "1" белое и
т.д.
107(H) Thresholding. Порог. Информация об этом
TAGе не имеется.
108(H) Cell width. Ширина ячейки. Информация об
этом TAGуе не имеется.
109(H) Cell lenght. Длина ячейки. Информации об
этом TAGе не имеется.
10A Fill order. Порядок заполнения. Имеет тип
3, длину 1. 1=заполнение MSB в LSB. MSB - старший
бит, LSB - младший бит. Например: пусть имеем 3 бита
на точку, тогда есть два варианта заполнения байта
10D Document name. Название документа.
10Е(H) Image description. Описание
изображения. Тип данных - 2.
10F(H) Make. Производство. Тип даных - 2.
110(H) Model. Модель. Тип данных - 2.
111(H) Strip offset. Адрес начала
изображения. Тип данных - 4. Всегда содержит адрес
начала непосредственно самого изображения.
112(H) Orientation. Ориентация. Тип данных - 3,
длина данных - 1. 1=normal
orientation. Предположительно, позволяет поворачивать
изображение не изменяя самого изображения, а изменяет
лишь данные, связанные с этим TAGом.
118(H) Min sample value. Минимальное значение
точки. Тип данных - 3, длина данных - 1. Например,
в черно-белом бинарном изображении принимает значение
0.
119(H) Max sample value. Максимальное значение
точки. Аналогично 118(H).
11A(H) X Resolution. Разрешение по оси Х. Тип
данных - 5, длина - 1. Так как дробь требует
минимально 8 байт, то дробь не умещается в TAGе. Так что
последние 4 байта всегда содержат указатель на 8 байт
информации. Предположительно обозначает количество точек
на дюйм, имевшееся при вводе изображения или необходимое
при его выводе.
11B(H) Y Resolution. Разрешение по оси
Y. Аналогично 11А(H).
11C(H) Planar configuration. Тип данных - 3, длина
- 1. 1=planar config is normal. Информация об этом
TAGе отсутствует.
11D(H) Page name. Название страницы. Тип данных
- 2.
11E(H) X Position. Координата Х. Смещение
изображения по оси Х относительно всей страницы
(предположительно левый верхний угол).
11F(H) Y Position. Координата Y. Аналогично
11Е(H).
120(H) Free offsets. Никакой информации об этом
TAGе не имеется.
121(H) Free byte counts. Аналогично 121(H).
122(H) Gray response unit. Блок представления
серого цвета.
123(H) Gray response curve. Огибающая серого
цвета. Содержит указатель на шкалу серого.
124(H) Group 3 options. Используется при
сжатии.
125(H) Group 4 options. Используется при
сжатии.
128(H) Resolution unit. Блок разрешения. Никакой
информации об этом TAGе не имеется.
129(H) Page number. Количество страниц.
12C(H) Color response unit. Блок цветного
представления. Никакой информации об этом TAGе не
имеется.
12D(H) Color response curves. Огибающая цвета.
Никакой информации об этом TAGе не имеется.
12. Тип данных.
Существуют 5 различных типов данных.
1 = byte 8-bit bytes байт из 8 бит 2 = ascii 8-bit
ASCII codes символы в ASCII коде (8 бит) 3 = short
16-bit (2 bytes) 16 бит (2 байта) unsigned integer
беззнаковое целое 4 = long 32-bit (4 bytes) 32 бита
(4 байта) unsigned integer беззнаковое целое 5 =
rational два числа: первое - числитель, второе -
знаменатель дроби.
Например, тип данных TAGа "Разрешение" это дробь.
Так, чтобы задать 300 точек на дюйм числитель нужно
установить в 300, а знаменатель в 1. Формат ASCII
нуждается в некотором объяснении. Вся ASCII информация в
TIFF-файлах заканчивается символом NULL (0). Вся
информация после этого символа не
воспринимается. |